# 数据分析题目解答(建议先赞后看，养成习惯 如果不赞，先拉出去枪毙两分钟 作者：小匠IT)
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import os
from openpyxl import Workbook
from openpyxl.drawing.image import Image

# 设置中文字体路径（请根据实际路径调整）
font_path = r'fonts/SIMSUN.TTC'
font_prop = FontProperties(fname=font_path)

# 创建输出文件夹
output_folder = r'output/26'
os.makedirs(output_folder, exist_ok=True)

# 直接使用提供的详细数据
data = {
    '平台': ['淘宝', '淘宝', '淘宝', '微信', '微信', '微信', '微博', '微博', '微博', '抖音', '抖音', '抖音'],
    '渠道': ['必买清单', '淘宝头条', '猜你喜欢', '森林小巷', '微光倾城', '为你精选', '种草菌', '干货达人', '一缕笑靥', '骆栖淮', '爱吃鱼', '西瓜宝宝'],
    '阅读量/次': [2056, 6599, 13589, 2500, 7986, 69826, 91586, 8660, 9621, 35689, 102345, 58729],
    '转发评论量/条': [569, 1200, 1700, 786, 1100, 2800, 3324, 1326, 2312, 1232, 3103, 1033],
    '店铺引流人数/人': [235, 899, 1685, 265, 125, 1300, 109, 75, 96, 1561, 1821, 1125],
    '成交人数/人': [56, 243, 266, 63, 36, 355, 86, 32, 59, 567, 1021, 658]
}

# 创建 DataFrame
df_content_effect = pd.DataFrame(data)

# 打印数据框的前几行，确认数据是否正确加载
print("数据框前几行：")
print(df_content_effect.head())

# 提取相关数据列
reads = df_content_effect['阅读量/次']
comments = df_content_effect['转发评论量/条']
conversion = df_content_effect['成交人数/人']
traffic = df_content_effect['店铺引流人数/人']

# 1. 数据可视化：对比各渠道的内容阅读量与转发评论量

# 绘制柱状图对比各渠道的内容阅读量
plt.figure(figsize=(10, 6))
plt.bar(df_content_effect['渠道'], reads, color='skyblue', label='阅读量')
plt.xlabel('渠道', fontproperties=font_prop)
plt.ylabel('数量', fontproperties=font_prop)
plt.title('各渠道内容阅读量对比', fontproperties=font_prop)
plt.xticks(fontproperties=font_prop, rotation=45, ha='right')
plt.legend(prop=font_prop)
plt.tight_layout()

output_image_reads = os.path.join(output_folder, '各渠道内容阅读量对比.png')
plt.savefig(output_image_reads, dpi=300, bbox_inches='tight')
plt.close()
print(f"各渠道内容阅读量对比图表已保存到 {output_image_reads}")

# 绘制柱状图对比各渠道的转发评论量
plt.figure(figsize=(10, 6))
plt.bar(df_content_effect['渠道'], comments, color='lightgreen', label='转发评论量')
plt.xlabel('渠道', fontproperties=font_prop)
plt.ylabel('数量', fontproperties=font_prop)
plt.title('各渠道内容转发评论量对比', fontproperties=font_prop)
plt.xticks(fontproperties=font_prop, rotation=45, ha='right')
plt.legend(prop=font_prop)
plt.tight_layout()

output_image_comments = os.path.join(output_folder, '各渠道内容转发评论量对比.png')
plt.savefig(output_image_comments, dpi=300, bbox_inches='tight')
plt.close()
print(f"各渠道内容转发评论量对比图表已保存到 {output_image_comments}")

# 2. 数据可视化：对比各渠道的内容成交人数情况和店铺引流情况

# 计算百分比并四舍五入保留两位小数
conversion_percentage = (conversion / conversion.sum() * 100).round(2)
traffic_percentage = (traffic / traffic.sum() * 100).round(2)

# 绘制饼图展示各渠道的内容成交人数占比
plt.figure(figsize=(6, 6))
plt.pie(conversion_percentage, labels=df_content_effect['渠道'], autopct='%1.2f%%', startangle=140, textprops={'fontproperties': font_prop})
plt.title('各渠道内容成交人数占比', fontproperties=font_prop)
plt.tight_layout()

output_image_conversion = os.path.join(output_folder, '各渠道内容成交人数占比.png')
plt.savefig(output_image_conversion, dpi=300, bbox_inches='tight')
plt.close()
print(f"各渠道内容成交人数占比图表已保存到 {output_image_conversion}")

# 绘制饼图展示各渠道的店铺引流人数占比
plt.figure(figsize=(6, 6))
plt.pie(traffic_percentage, labels=df_content_effect['渠道'], autopct='%1.2f%%', startangle=140, textprops={'fontproperties': font_prop})
plt.title('各渠道店铺引流人数占比', fontproperties=font_prop)
plt.tight_layout()

output_image_traffic = os.path.join(output_folder, '各渠道店铺引流人数占比.png')
plt.savefig(output_image_traffic, dpi=300, bbox_inches='tight')
plt.close()
print(f"各渠道店铺引流人数占比图表已保存到 {output_image_traffic}")

# 3. 简答题：综合分析此次内容运营效果最好的渠道

# 分析各个指标的表现
best_platform_reads = df_content_effect.loc[reads.idxmax(), '平台']
best_platform_comments = df_content_effect.loc[comments.idxmax(), '平台']
best_platform_conversion = df_content_effect.loc[conversion.idxmax(), '平台']
best_platform_traffic = df_content_effect.loc[traffic.idxmax(), '平台']

# 输出简答题答案
analysis_result = f"""
综合分析此次内容运营效果最好的渠道：
- 阅读量最高的平台: {best_platform_reads}
- 转发评论量最多的平台: {best_platform_comments}
- 成交人数最多的平台: {best_platform_conversion}
- 店铺引流人数最多的平台: {best_platform_traffic}

从多个指标来看，{best_platform_conversion} 在成交人数方面表现最好，可能是此次内容运营效果最好的渠道。
"""

analysis_file_path = os.path.join(output_folder, '综合分析.txt')
with open(analysis_file_path, 'w', encoding='utf-8') as file:
    file.write(analysis_result)
print(f"综合分析结果已保存到 {analysis_file_path}")

# 4. 简答题：判断转化效果最好的渠道

# 找出每个平台中成交人数最多的渠道
best_conversion_per_platform = df_content_effect.loc[df_content_effect.groupby('平台')['成交人数/人'].idxmax()][['平台', '渠道', '成交人数/人']].reset_index(drop=True)

result_text = "四个平台内容转化效果最好的渠道分别是:\n"
for idx, row in best_conversion_per_platform.iterrows():
    result_text += f"{row['平台']} 平台: {row['渠道']} (成交人数: {row['成交人数/人']})\n"

result_file_path = os.path.join(output_folder, '转化效果最好的渠道.txt')
with open(result_file_path, 'w', encoding='utf-8') as file:
    file.write(result_text)
print(f"转化效果最好的渠道信息已保存到 {result_file_path}")

# 将最终结果汇总成一个Excel文件
final_output_excel = os.path.join(output_folder, '内容运营效果分析.xlsx')

# 创建一个ExcelWriter对象，用于将多个DataFrame写入同一个Excel文件的不同工作表中
with pd.ExcelWriter(final_output_excel, engine='xlsxwriter') as writer:
    df_content_effect.to_excel(writer, sheet_name='原始数据', index=False)
    best_conversion_per_platform.to_excel(writer, sheet_name='转化效果最好的渠道', index=False)
    
    # 将文本结果写入Excel文件中的单独工作表
    with open(analysis_file_path, 'r', encoding='utf-8') as analysis_file:
        analysis_sheet = writer.book.add_worksheet('综合分析')
        analysis_sheet.write(0, 0, analysis_file.read())
        
print(f"所有数据分析结果已保存到 {final_output_excel}")

# 创建第二个Excel文件，包含所有的分析图表
charts_excel = os.path.join(output_folder, '分析图表.xlsx')
wb = Workbook()
ws = wb.active
ws.title = "分析图表"

# 插入图片到Excel工作表中
images = [
    output_image_reads,
    output_image_comments,
    output_image_conversion,
    output_image_traffic
]

for i, img_path in enumerate(images, start=1):
    img = Image(img_path)
    ws.add_image(img, f'A{i*20}')  # 每张图片占用20行空间，以避免重叠

wb.save(charts_excel)
print(f"所有分析图表已保存到 {charts_excel}")